package com.dianshang.rabbitmq;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * 消息生产者
 */
// 注解形式：读取XML文件
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext-producer.xml")
public class Producer {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    /**
     * 直连模式 Direct 点对点
     *
     * 只能向一个队列发送消息
     */
    @Test
    public void sendMsg(){
        // 使用默认的交换器,把消息发送到队列中......
        // 把消息发送到队列中：
        //           单条消息的话,多个消费者先到先得        多条消息的话,多个消费者按顺序得
        // 消息存放到队列
        rabbitTemplate.convertAndSend("dianshang.zhaoyu1","赵宇YYDS"); // routingKey：队列名称 object：发送的消息内容
        rabbitTemplate.convertAndSend("","dianshang.zhaoyu1","宇尘YYDS"); // exchange：交换器 routingKey：队列名称 object：发送的消息内容
    }

    /**
     * 订阅与发布模式：
     *      分列模式 Fanout
     *
     * 可以向多个队列发送消息
     */
    @Test
    public void sendMsgFanout(){ // 交换器里面包含了队列,所以只需要写交换器和发送的消息内容
        rabbitTemplate.convertAndSend("dianshang.fanout_test","","Fanout......"); // exchange：交换器 routingKey：队列名称 object：发送的消息内容
    }

}